--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / backend / eect / packs / test_scarcity_pack.py
Displaying Raw • Download
tests/backend/eect/packs/test_scarcity_pack.py c0b0ddffd735a0d007c1be9a5e8563ec42fdafc0 (c0b0ddff) Text, 3.22 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""ScarcityPack: conversation list stays slim under large payloads."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787secrets
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787time
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787databaseT7ee787.T7ee787provider Tff7b72import Te6edf3DatabaseProvider
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787message_handler Tff7b72import Te6edf3MessageHandler
Tff7b72from T7ee787testsT7ee787.T7ee787backendT7ee787.T7ee787eectT7ee787.T7ee787asserts Tff7b72import Te6edf3assert_preview_capped
Tff7b72from T7ee787testsT7ee787.T7ee787backendT7ee787.T7ee787eectT7ee787.T7ee787harness Tff7b72import Te6edf3eect_scenario
Te6edf3pytestmark Tff7b72= Te6edf3pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffeect
Tff7b72def Td2a8ff_messageTb4b4b4(Te6edf3peer_hashTb4b4b4, Te6edf3iTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3fieldsTff7b72=Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4, Te6edf3contentTff7b72=Ta5d6ff"Ta5d6ffhelloTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsource_hashTa5d6ff"Tb4b4b4: Te6edf3peer_hashTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fflocalhashlocalhashlocalhashlo12Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpeer_hashTa5d6ff"Tb4b4b4: Te6edf3peer_hashTb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdeliveredTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4: T79c0ff1.0Tb4b4b4,
Ta5d6ff"Ta5d6ffis_incomingTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdirectTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdelivery_attemptsTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6ffnext_delivery_attempt_atTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6fftTffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3contentTb4b4b4,
Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4: Te6edf3fieldsTb4b4b4,
Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4: Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3iTb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72-T79c0ff50Tb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: T79c0ff5.0Tb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: T79c0ff3Tb4b4b4,
Ta5d6ff"Ta5d6ffis_spamTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Ta5d6ff"Ta5d6ffreply_to_hashTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffhandler_dbTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instanceTff7b72.Td2a8ffclose_allTb4b4b4(Tb4b4b4)
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72= Tff7b72None
Te6edf3tmp Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4)
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3tmpTff7b72.Td2a8ffnameTffd700}Ta5d6ff/database.dbTa5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Te6edf3handler Tff7b72= Te6edf3MessageHandlerTb4b4b4(Te6edf3dbTb4b4b4)
Tff7b72yield Te6edf3handlerTb4b4b4, Te6edf3db
Te6edf3dbTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instanceTff7b72.Td2a8ffclose_allTb4b4b4(Tb4b4b4)
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72= Tff7b72None
Te6edf3tmpTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_eect_conversation_preview_cappedTb4b4b4(Te6edf3handler_dbTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3eect_scenarioTb4b4b4(Ta5d6ff"Ta5d6ffscarcity.conversation.preview_cappedTa5d6ff"Tb4b4b4) Tff7b72as Tb4b4b4(Te6edf3_sTb4b4b4, Te6edf3_seedTb4b4b4, Te6edf3rngTb4b4b4)Tb4b4b4:
Te6edf3handlerTb4b4b4, Te6edf3db Tff7b72= Te6edf3handler_db
Te6edf3peer Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3long_content Tff7b72= Ta5d6ff"Ta5d6ffxTa5d6ff" Tff7b72* Tb4b4b4(Te6edf3MessageHandlerTff7b72.Td2a8ff_CONVERSATION_CONTENT_PREVIEW_CHARS Tff7b72+ T79c0ff500Tb4b4b4)
T8b949e# Sprinkle a few shorter messages so list still forms.
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4:
Te6edf3content Tff7b72= Te6edf3long_content Tff7b72if Te6edf3i Tff7b72== T79c0ff0 Tff7b72else Tb4b4b4(Ta5d6ff"Ta5d6ffyTa5d6ff" Tff7b72* Tb4b4b4(T79c0ff20 Tff7b72+ Te6edf3rngTff7b72.Td2a8ffrandintTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff40Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffupsert_lxmf_messageTb4b4b4(Te6edf3_messageTb4b4b4(Te6edf3peerTb4b4b4, Te6edf3iTb4b4b4, Te6edf3contentTff7b72=Te6edf3contentTb4b4b4)Tb4b4b4)
Te6edf3rows Tff7b72= Te6edf3handlerTff7b72.Td2a8ffget_conversationsTb4b4b4(Ta5d6ff"Ta5d6fflocalTa5d6ff"Tb4b4b4, Te6edf3limitTff7b72=T79c0ff10Tb4b4b4)
Tff7b72assert Te6edf3rows
Tff7b72for Te6edf3row Tff7b72in Te6edf3rowsTb4b4b4:
Te6edf3assert_preview_cappedTb4b4b4(
Tffa657dictTb4b4b4(Te6edf3rowTb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3MessageHandlerTff7b72.Td2a8ff_CONVERSATION_CONTENT_PREVIEW_CHARSTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_eect_conversation_list_omits_fieldsTb4b4b4(Te6edf3handler_dbTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3eect_scenarioTb4b4b4(Ta5d6ff"Ta5d6ffscarcity.conversation.fields_slimTa5d6ff"Tb4b4b4) Tff7b72as Tb4b4b4(Te6edf3_sTb4b4b4, Te6edf3_seedTb4b4b4, Te6edf3_rngTb4b4b4)Tb4b4b4:
Te6edf3handlerTb4b4b4, Te6edf3db Tff7b72= Te6edf3handler_db
Te6edf3peer Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3big_b64 Tff7b72= Ta5d6ff"Ta5d6ffCTa5d6ff" Tff7b72* T79c0ff90000
Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffupsert_lxmf_messageTb4b4b4(
Te6edf3_messageTb4b4b4(
Te6edf3peerTb4b4b4,
T79c0ff0Tb4b4b4,
Te6edf3fieldsTff7b72=Tb4b4b4{
Ta5d6ff"Ta5d6ffimageTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffimage_typeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffimage_bytesTa5d6ff"Tb4b4b4: Te6edf3big_b64Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3contentTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3rows Tff7b72= Te6edf3handlerTff7b72.Td2a8ffget_conversationsTb4b4b4(Ta5d6ff"Ta5d6fflocalTa5d6ff"Tb4b4b4, Te6edf3limitTff7b72=T79c0ff10Tb4b4b4)
Tff7b72assert Te6edf3rows
Te6edf3row Tff7b72= Tffa657dictTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6fffieldsTa5d6ff" Tff7b72not Tff7b72in Te6edf3row
Tff7b72assert Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhas_imageTa5d6ff"Tb4b4b4) Tff7b72== T79c0ff1
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────